home *** CD-ROM | disk | FTP | other *** search
/ Hardcore Visual Basic 5.0 (2nd Edition) / Hardcore Visual Basic 5.0 - Second Edition (1997)(Microsoft Press).iso / Source / WinTlb / OBJIDL.IDL < prev    next >
Text File  |  1997-04-22  |  63KB  |  2,713 lines

  1. //+-------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992 - 1996.
  5. //
  6. //  File: objidl.idl
  7. //
  8. //--------------------------------------------------------------------------
  9.  
  10. #ifndef DO_NO_IMPORTS
  11. import "unknwn.idl";
  12. #endif
  13.  
  14. interface IStream;
  15. interface IMoniker;
  16. interface IEnumMoniker;
  17. interface IEnumString;
  18. interface IRunningObjectTable;
  19. interface IStorage;
  20. interface IEnumSTATSTG;
  21. interface IAdviseSink;
  22. interface IBindCtx;
  23. interface IEnumMoniker;
  24. interface IConnectionPointContainer;
  25. interface IConnectionPoint;
  26. interface IEnumConnections;
  27. interface IEnumConnectionPoints;
  28.  
  29. #if 0
  30.  
  31. // Component Object Interfaces
  32.  
  33. [
  34.     local,
  35.     object,
  36.     uuid(00000003-0000-0000-C000-000000000046)
  37. ]
  38.  
  39. interface IMarshal : IUnknown
  40. {
  41.  
  42. cpp_quote("//+-------------------------------------------------------------------------")
  43. cpp_quote("//")
  44. cpp_quote("//  Microsoft Windows")
  45. cpp_quote("//  Copyright (C) Microsoft Corporation, 1992 - 1996.")
  46. cpp_quote("//")
  47. cpp_quote("//--------------------------------------------------------------------------")
  48.  
  49.     typedef [unique] IMarshal *LPMARSHAL;
  50.  
  51.     HRESULT GetUnmarshalClass
  52.     (
  53.         [in] REFIID riid,
  54.         [in, unique] void *pv,
  55.         [in] DWORD dwDestContext,
  56.         [in, unique] void *pvDestContext,
  57.         [in] DWORD mshlflags,
  58.         [out] CLSID *pCid
  59.     );
  60.  
  61.     HRESULT GetMarshalSizeMax
  62.     (
  63.         [in] REFIID riid,
  64.         [in, unique] void *pv,
  65.         [in] DWORD dwDestContext,
  66.         [in, unique] void *pvDestContext,
  67.         [in] DWORD mshlflags,
  68.         [out] DWORD *pSize
  69.     );
  70.  
  71.     HRESULT MarshalInterface
  72.     (
  73.         [in, unique] IStream *pStm,
  74.         [in] REFIID riid,
  75.         [in, unique] void *pv,
  76.         [in] DWORD dwDestContext,
  77.         [in, unique] void *pvDestContext,
  78.         [in] DWORD mshlflags
  79.     );
  80.  
  81.     HRESULT UnmarshalInterface
  82.     (
  83.         [in, unique] IStream *pStm,
  84.         [in] REFIID riid,
  85.         [out] void **ppv
  86.     );
  87.  
  88.     HRESULT ReleaseMarshalData
  89.     (
  90.         [in, unique] IStream *pStm
  91.     );
  92.  
  93.     HRESULT DisconnectObject
  94.     (
  95.         [in] DWORD dwReserved
  96.     );
  97. }
  98.  
  99. [
  100.     local,
  101.     object,
  102.     uuid(00000002-0000-0000-C000-000000000046)
  103. ]
  104.  
  105. interface IMalloc : IUnknown
  106. {
  107.  
  108.     typedef [unique] IMalloc *LPMALLOC;
  109.  
  110.     void *Alloc([in] ULONG cb);
  111.  
  112.     void *Realloc ([in] void *pv,
  113.                    [in] ULONG cb);
  114.  
  115.     void Free([in] void *pv);
  116.  
  117.     ULONG GetSize([in] void *pv);
  118.  
  119.     int DidAlloc(void *pv);
  120.  
  121.     void HeapMinimize(void);
  122. }
  123.  
  124. [
  125.     local,
  126.     object,
  127.     uuid(0000001d-0000-0000-C000-000000000046)
  128. ]
  129.  
  130. interface IMallocSpy : IUnknown
  131. {
  132.  
  133.     typedef [unique] IMallocSpy *LPMALLOCSPY;
  134.  
  135.     ULONG PreAlloc
  136.     (
  137.         [in] ULONG cbRequest
  138.     );
  139.  
  140.     void  *PostAlloc
  141.     (
  142.         [in] void *pActual
  143.     );
  144.  
  145.     void  *PreFree
  146.     (
  147.         [in] void *pRequest,
  148.         [in] BOOL  fSpyed
  149.     );
  150.  
  151.     void  PostFree
  152.     (
  153.         [in] BOOL  fSpyed
  154.     );
  155.  
  156.     ULONG PreRealloc
  157.     (
  158.         [in] void   *pRequest,
  159.         [in] ULONG   cbRequest,
  160.         [out] void **ppNewRequest,
  161.         [in] BOOL    fSpyed
  162.     );
  163.  
  164.     void  *PostRealloc
  165.     (
  166.         [in] void *pActual,
  167.         [in] BOOL  fSpyed
  168.     );
  169.  
  170.     void  *PreGetSize
  171.     (
  172.         [in] void *pRequest,
  173.         [in] BOOL  fSpyed
  174.     );
  175.  
  176.     ULONG PostGetSize
  177.     (
  178.         [in] ULONG cbActual,
  179.         [in] BOOL  fSpyed
  180.     );
  181.  
  182.     void  *PreDidAlloc
  183.     (
  184.         [in] void *pRequest,
  185.         [in] BOOL  fSpyed
  186.     );
  187.  
  188.     int   PostDidAlloc
  189.     (
  190.         [in] void *pRequest,
  191.         [in] BOOL  fSpyed,
  192.         [in] int   fActual
  193.     );
  194.  
  195.     void  PreHeapMinimize(void);
  196.  
  197.     void  PostHeapMinimize(void);
  198. }
  199.  
  200. [
  201.     local,
  202.     object,
  203.     uuid(00000018-0000-0000-C000-000000000046)
  204. ]
  205.  
  206. interface IStdMarshalInfo : IUnknown
  207. {
  208.  
  209.     typedef [unique] IStdMarshalInfo * LPSTDMARSHALINFO;
  210.  
  211.     HRESULT GetClassForHandler
  212.     (
  213.         [in] DWORD dwDestContext,
  214.         [in, unique] void *pvDestContext,
  215.         [out] CLSID *pClsid
  216.     );
  217. }
  218.  
  219. [
  220.     object,
  221.     local,
  222.     uuid(00000019-0000-0000-C000-000000000046)
  223. ]
  224.  
  225. interface IExternalConnection : IUnknown
  226. {
  227.  
  228.     typedef [unique] IExternalConnection* LPEXTERNALCONNECTION;
  229.  
  230.  
  231.     // bit flags for IExternalConnection
  232.     typedef enum tagEXTCONN
  233.     {
  234.         EXTCONN_STRONG      = 0x0001,   // strong connection
  235.         EXTCONN_WEAK        = 0x0002,   // weak connection (table, container)
  236.         EXTCONN_CALLABLE    = 0x0004,   // table .vs. callable
  237.     } EXTCONN;
  238.  
  239.     // *** IExternalConnection methods ***
  240.     DWORD AddConnection
  241.     (
  242.         [in] DWORD extconn,
  243.         [in] DWORD reserved
  244.     );
  245.  
  246.     DWORD ReleaseConnection
  247.     (
  248.         [in] DWORD extconn,
  249.         [in] DWORD reserved,
  250.         [in] BOOL  fLastReleaseCloses
  251.     );
  252. }
  253.  
  254.  
  255. [
  256.     object,
  257.     local,
  258.     uuid(00000020-0000-0000-C000-000000000046)
  259. ]
  260.  
  261. interface IMultiQI : IUnknown
  262. {
  263.     typedef [unique] IMultiQI* LPMULTIQI;
  264.  
  265.     typedef struct tagMULTI_QI
  266.     {
  267.         const IID  *pIID; // pass this one in
  268.         IUnknown   *pItf; // get these out (you must set to NULL before calling)
  269.         HRESULT     hr;
  270.     } MULTI_QI;
  271.  
  272.     HRESULT QueryMultipleInterfaces
  273.     (
  274.         [in]     ULONG      cMQIs,
  275.         [in,out] MULTI_QI  *pMQIs
  276.     );
  277. }
  278.  
  279.  
  280. [
  281.     object,
  282.     uuid(00000100-0000-0000-C000-000000000046),
  283.     pointer_default(unique)
  284. ]
  285.  
  286. interface IEnumUnknown : IUnknown
  287. {
  288.  
  289.     typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
  290.  
  291.     [local]
  292.     HRESULT Next(
  293.         [in] ULONG celt,
  294.         [out] IUnknown **rgelt,
  295.         [out] ULONG *pceltFetched);
  296.  
  297.     [call_as(Next)]
  298.     HRESULT RemoteNext(
  299.         [in] ULONG celt,
  300.         [out, size_is(celt), length_is(*pceltFetched)]
  301.         IUnknown **rgelt,
  302.         [out] ULONG *pceltFetched);
  303.  
  304.     HRESULT Skip(
  305.         [in] ULONG celt);
  306.  
  307.     HRESULT Reset();
  308.  
  309.     HRESULT Clone(
  310.         [out] IEnumUnknown **ppenum);
  311. }
  312.  
  313.  
  314. // Binding Interfaces
  315.  
  316. [
  317.     object,
  318.     uuid(0000000e-0000-0000-C000-000000000046),
  319.     pointer_default(unique)
  320. ]
  321.  
  322. interface IBindCtx : IUnknown
  323. {
  324.  
  325.     typedef [unique] IBindCtx *LPBC;
  326.  
  327.     typedef [unique] IBindCtx *LPBINDCTX;
  328.  
  329.     typedef struct tagBIND_OPTS {
  330.     DWORD       cbStruct;       //  sizeof(BIND_OPTS)
  331.     DWORD       grfFlags;
  332.     DWORD       grfMode;
  333.     DWORD       dwTickCountDeadline;
  334.     } BIND_OPTS, * LPBIND_OPTS;
  335.  
  336. cpp_quote("#if defined(__cplusplus)")
  337. cpp_quote("    typedef struct tagBIND_OPTS2 : tagBIND_OPTS{")
  338. cpp_quote("    DWORD       dwTrackFlags;")
  339. cpp_quote("    DWORD       dwClassContext;")
  340. cpp_quote("    LCID        locale;")
  341. cpp_quote("    } BIND_OPTS2, * LPBIND_OPTS2;")
  342. cpp_quote("#else")
  343.  
  344.     typedef struct tagBIND_OPTS2 {
  345.     DWORD       cbStruct;       //  sizeof(BIND_OPTS2)
  346.     DWORD       grfFlags;
  347.     DWORD       grfMode;
  348.     DWORD       dwTickCountDeadline;
  349.     DWORD       dwTrackFlags;
  350.     DWORD       dwClassContext;
  351.     LCID        locale;
  352.     } BIND_OPTS2, * LPBIND_OPTS2;
  353.  
  354. cpp_quote("#endif")
  355.  
  356.  
  357.     typedef enum tagBIND_FLAGS
  358.     {
  359.         BIND_MAYBOTHERUSER = 1,
  360.         BIND_JUSTTESTEXISTENCE = 2
  361.     } BIND_FLAGS;
  362.  
  363.     HRESULT RegisterObjectBound
  364.     (
  365.         [in, unique] IUnknown *punk
  366.     );
  367.  
  368.     HRESULT RevokeObjectBound
  369.     (
  370.         [in, unique] IUnknown *punk
  371.     );
  372.  
  373.     HRESULT ReleaseBoundObjects
  374.     (
  375.         void
  376.     );
  377.  
  378.     [local]
  379.     HRESULT SetBindOptions
  380.     (
  381.         [in] BIND_OPTS *pbindopts
  382.     );
  383.  
  384.     [call_as(SetBindOptions)]
  385.     HRESULT RemoteSetBindOptions
  386.     (
  387.         [in] BIND_OPTS2 *pbindopts
  388.     );
  389.  
  390.     [local]
  391.     HRESULT GetBindOptions
  392.     (
  393.         [in, out] BIND_OPTS *pbindopts
  394.     );
  395.  
  396.     [call_as(GetBindOptions)]
  397.     HRESULT RemoteGetBindOptions
  398.     (
  399.         [in, out] BIND_OPTS2 *pbindopts
  400.     );
  401.  
  402.     HRESULT GetRunningObjectTable
  403.     (
  404.         [out] IRunningObjectTable **pprot
  405.     );
  406.  
  407.     HRESULT RegisterObjectParam(
  408.         [in] LPOLESTR pszKey,
  409.         [in, unique] IUnknown *punk
  410.     );
  411.  
  412.     HRESULT GetObjectParam(
  413.         [in] LPOLESTR pszKey,
  414.         [out] IUnknown **ppunk
  415.     );
  416.  
  417.     HRESULT EnumObjectParam
  418.     (
  419.         [out] IEnumString **ppenum
  420.     );
  421.  
  422.     HRESULT RevokeObjectParam
  423.     (
  424.         [in] LPOLESTR pszKey
  425.     );
  426. }
  427.  
  428. [
  429.     object,
  430.     uuid(00000102-0000-0000-C000-000000000046),
  431.     pointer_default(unique)
  432. ]
  433.  
  434. interface IEnumMoniker : IUnknown
  435. {
  436.  
  437.     typedef [unique] IEnumMoniker *LPENUMMONIKER;
  438.  
  439.     [local]
  440.     HRESULT Next(
  441.         [in] ULONG celt,
  442.         [out] IMoniker **rgelt,
  443.         [out] ULONG *pceltFetched);
  444.  
  445.     [call_as(Next)]
  446.     HRESULT RemoteNext(
  447.         [in] ULONG celt,
  448.         [out, size_is(celt), length_is(*pceltFetched)]
  449.         IMoniker **rgelt,
  450.         [out] ULONG *pceltFetched);
  451.  
  452.  
  453.     HRESULT Skip(
  454.         [in] ULONG celt);
  455.  
  456.     HRESULT Reset();
  457.  
  458.     HRESULT Clone(
  459.         [out] IEnumMoniker **ppenum);
  460. }
  461.  
  462. [
  463.     object,
  464.     uuid(00000126-0000-0000-C000-000000000046)
  465. ]
  466. interface IRunnableObject : IUnknown
  467. {
  468.  
  469.     typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
  470.  
  471.     HRESULT GetRunningClass(
  472.         [out] LPCLSID lpClsid);
  473.  
  474.     HRESULT Run(
  475.         [in] LPBINDCTX pbc);
  476.  
  477.     [local]
  478.     BOOL IsRunning();
  479.  
  480.     [call_as(IsRunning)]
  481.     HRESULT RemoteIsRunning();
  482.  
  483.     HRESULT LockRunning(
  484.         [in] BOOL fLock,
  485.         [in] BOOL fLastUnlockCloses);
  486.  
  487.     HRESULT SetContainedObject(
  488.         [in] BOOL fContained);
  489. }
  490.  
  491. [
  492.     object,
  493.     uuid(00000010-0000-0000-C000-000000000046)
  494. ]
  495.  
  496. interface IRunningObjectTable : IUnknown
  497. {
  498.  
  499.     typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
  500.  
  501.     HRESULT Register
  502.     (
  503.         [in] DWORD grfFlags,
  504.         [in, unique] IUnknown *punkObject,
  505.         [in, unique] IMoniker *pmkObjectName,
  506.         [out] DWORD *pdwRegister
  507.     );
  508.  
  509.     HRESULT Revoke
  510.     (
  511.         [in] DWORD dwRegister
  512.     );
  513.  
  514.     HRESULT IsRunning
  515.     (
  516.         [in, unique] IMoniker *pmkObjectName
  517.     );
  518.  
  519.     HRESULT GetObject
  520.     (
  521.         [in, unique] IMoniker *pmkObjectName,
  522.         [out] IUnknown **ppunkObject
  523.     );
  524.  
  525.     HRESULT NoteChangeTime
  526.     (
  527.         [in] DWORD dwRegister,
  528.         [in] LPFILETIME pfiletime
  529.     );
  530.  
  531.     HRESULT GetTimeOfLastChange
  532.     (
  533.         [in, unique] IMoniker *pmkObjectName,
  534.         [out] LPFILETIME pfiletime
  535.     );
  536.  
  537.     HRESULT EnumRunning
  538.     (
  539.         [out] IEnumMoniker **ppenumMoniker
  540.     );
  541.  
  542. }
  543.  
  544. [
  545.     object,
  546.     uuid(0000010c-0000-0000-C000-000000000046)
  547. ]
  548.  
  549. interface IPersist : IUnknown
  550. {
  551.  
  552.     typedef [unique] IPersist *LPPERSIST;
  553.  
  554.     HRESULT GetClassID
  555.     (
  556.         [out] CLSID *pClassID
  557.     );
  558. }
  559.  
  560. [
  561.     object,
  562.     uuid(00000109-0000-0000-C000-000000000046),
  563.     pointer_default(unique)
  564. ]
  565.  
  566. interface IPersistStream : IPersist
  567. {
  568.  
  569.     typedef [unique] IPersistStream *LPPERSISTSTREAM;
  570.  
  571.     HRESULT IsDirty
  572.     (
  573.         void
  574.     );
  575.  
  576.     HRESULT Load
  577.     (
  578.         [in, unique] IStream *pStm
  579.     );
  580.  
  581.     HRESULT Save
  582.     (
  583.         [in, unique] IStream *pStm,
  584.         [in] BOOL fClearDirty
  585.     );
  586.  
  587.     HRESULT GetSizeMax
  588.     (
  589.         [out] ULARGE_INTEGER *pcbSize
  590.     );
  591.  
  592. }
  593.  
  594. [
  595.     object,
  596.     uuid(0000000f-0000-0000-C000-000000000046),
  597.     pointer_default(unique)
  598. ]
  599.  
  600. interface IMoniker : IPersistStream
  601. {
  602.  
  603.     typedef [unique] IMoniker *LPMONIKER;
  604.  
  605.     // system moniker types; returned from IsSystemMoniker.
  606.     typedef enum MKSYS {
  607.         MKSYS_NONE = 0,
  608.         MKSYS_GENERICCOMPOSITE = 1,
  609.         MKSYS_FILEMONIKER = 2,
  610.         MKSYS_ANTIMONIKER = 3,
  611.         MKSYS_ITEMMONIKER = 4,
  612.         MKSYS_POINTERMONIKER = 5,
  613.     //  MKSYS_URLMONIKER = 6,
  614.         MKSYS_CLASSMONIKER = 7
  615.     }MKSYS;
  616.  
  617.  
  618.     typedef [v1_enum] enum MKREDUCE {
  619.         MKRREDUCE_ONE           =   3<<16,
  620.  
  621.         MKRREDUCE_TOUSER        =   2<<16,
  622.         MKRREDUCE_THROUGHUSER   =   1<<16,
  623.         MKRREDUCE_ALL           =   0
  624.     } MKRREDUCE;
  625.  
  626.  
  627.     [local]
  628.     HRESULT BindToObject(
  629.         [in, unique] IBindCtx *pbc,
  630.         [in, unique] IMoniker *pmkToLeft,
  631.         [in] REFIID riidResult,
  632.         [out] void **ppvResult);
  633.  
  634.     [call_as(BindToObject)]
  635.     HRESULT RemoteBindToObject(
  636.         [in, unique] IBindCtx *pbc,
  637.         [in, unique] IMoniker *pmkToLeft,
  638.         [in] REFIID riidResult,
  639.         [out, iid_is(riidResult)] IUnknown **ppvResult);
  640.  
  641.     [local]
  642.     HRESULT BindToStorage(
  643.         [in, unique] IBindCtx *pbc,
  644.         [in, unique] IMoniker *pmkToLeft,
  645.         [in] REFIID riid,
  646.         [out] void **ppvObj);
  647.  
  648.     [call_as(BindToStorage)]
  649.     HRESULT RemoteBindToStorage(
  650.         [in, unique] IBindCtx *pbc,
  651.         [in, unique] IMoniker *pmkToLeft,
  652.         [in] REFIID riid,
  653.         [out, iid_is(riid)] IUnknown **ppvObj);
  654.  
  655.     HRESULT Reduce(
  656.         [in, unique] IBindCtx *pbc,
  657.         [in] DWORD dwReduceHowFar,
  658.         [in, out, unique] IMoniker **ppmkToLeft,
  659.         [out] IMoniker **ppmkReduced);
  660.  
  661.     HRESULT ComposeWith(
  662.         [in, unique] IMoniker *pmkRight,
  663.         [in] BOOL fOnlyIfNotGeneric,
  664.         [out] IMoniker **ppmkComposite);
  665.  
  666.     HRESULT Enum(
  667.         [in] BOOL fForward,
  668.         [out] IEnumMoniker **ppenumMoniker);
  669.  
  670.     HRESULT IsEqual(
  671.         [in, unique] IMoniker *pmkOtherMoniker);
  672.  
  673.     HRESULT Hash(
  674.         [out] DWORD *pdwHash);
  675.  
  676.     HRESULT IsRunning(
  677.         [in, unique] IBindCtx *pbc,
  678.         [in, unique] IMoniker *pmkToLeft,
  679.         [in, unique] IMoniker *pmkNewlyRunning);
  680.  
  681.     HRESULT GetTimeOfLastChange(
  682.         [in, unique] IBindCtx *pbc,
  683.         [in, unique] IMoniker *pmkToLeft,
  684.         [out] LPFILETIME pFileTime);
  685.  
  686.     HRESULT Inverse(
  687.         [out] IMoniker **ppmk);
  688.  
  689.     HRESULT CommonPrefixWith(
  690.         [in, unique] IMoniker *pmkOther,
  691.         [out] IMoniker **ppmkPrefix);
  692.  
  693.     HRESULT RelativePathTo(
  694.         [in, unique] IMoniker *pmkOther,
  695.         [out] IMoniker **ppmkRelPath);
  696.  
  697.     HRESULT GetDisplayName(
  698.         [in, unique] IBindCtx *pbc,
  699.         [in, unique] IMoniker *pmkToLeft,
  700.         [out] LPOLESTR *ppszDisplayName);
  701.  
  702.     HRESULT ParseDisplayName(
  703.         [in, unique] IBindCtx *pbc,
  704.         [in, unique] IMoniker *pmkToLeft,
  705.         [in] LPOLESTR pszDisplayName,
  706.         [out] ULONG *pchEaten,
  707.         [out] IMoniker **ppmkOut);
  708.  
  709.     HRESULT IsSystemMoniker(
  710.         [out] DWORD *pdwMksys);
  711.  
  712. }
  713.  
  714.  
  715. [
  716.     object,
  717.     uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
  718.     pointer_default(unique)
  719. ]
  720.  
  721. interface IROTData : IUnknown
  722. {
  723.     HRESULT GetComparisonData(
  724.         [out, size_is(cbMax)] byte *pbData,
  725.         [in]  ULONG cbMax,
  726.         [out] ULONG *pcbData);
  727. }
  728.  
  729. [
  730.     object,
  731.     uuid(00000101-0000-0000-C000-000000000046),
  732.     pointer_default(unique)
  733. ]
  734.  
  735. interface IEnumString : IUnknown
  736. {
  737.  
  738.     typedef [unique] IEnumString *LPENUMSTRING;
  739.  
  740.     [local]
  741.     HRESULT Next(
  742.         [in] ULONG celt,
  743.         [out] LPOLESTR *rgelt,
  744.         [out] ULONG *pceltFetched);
  745.  
  746.     [call_as(Next)]
  747.     HRESULT RemoteNext(
  748.         [in] ULONG celt,
  749.         [out, size_is(celt), length_is(*pceltFetched)]
  750.         LPOLESTR *rgelt,
  751.         [out] ULONG *pceltFetched);
  752.  
  753.  
  754.     HRESULT Skip(
  755.         [in] ULONG celt);
  756.  
  757.     HRESULT Reset();
  758.  
  759.     HRESULT Clone(
  760.         [out] IEnumString **ppenum);
  761. }
  762. #endif
  763.  
  764. // Structured Storage Interfaces
  765.  
  766. [
  767.     object,
  768.     uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
  769.     pointer_default(unique)
  770. ]
  771. interface ISequentialStream : IUnknown
  772. {
  773.     [local]
  774.     HRESULT Read(
  775.         [out] void *pv,
  776.         [in] ULONG cb,
  777.         [out] ULONG *pcbRead);
  778.  
  779.     [call_as(Read)]
  780.     HRESULT RemoteRead(
  781.         [out, size_is(cb), length_is(*pcbRead)]
  782.         byte *pv,
  783.         [in] ULONG cb,
  784.         [out] ULONG *pcbRead);
  785.  
  786.     [local]
  787.     HRESULT Write(
  788.         [in, size_is(cb)] void const *pv,
  789.         [in] ULONG cb,
  790.         [out] ULONG *pcbWritten);
  791.  
  792.     [call_as(Write)]
  793.     HRESULT RemoteWrite(
  794.         [in, size_is(cb)] byte const *pv,
  795.         [in] ULONG cb,
  796.         [out] ULONG *pcbWritten);
  797. }
  798.  
  799.  
  800. [
  801.     object,
  802.     uuid(0000000c-0000-0000-C000-000000000046),
  803.     pointer_default(unique)
  804. ]
  805.  
  806. interface IStream : ISequentialStream
  807. {
  808.  
  809.     typedef [unique] IStream *LPSTREAM;
  810.  
  811.     // Storage stat buffer 
  812.  
  813.     typedef struct STATSTG {
  814.         LPOLESTR pwcsName;
  815.         DWORD type;
  816.         CURRENCY cbSize;
  817.         CURRENCY mtime;
  818.         CURRENCY ctime;
  819.         CURRENCY atime;
  820.         DWORD grfMode;
  821.         DWORD grfLocksSupported;
  822.         CLSID clsid;
  823.         DWORD grfStateBits;
  824.         DWORD reserved;
  825.     } STATSTG;
  826.  
  827.     typedef struct STATSTGO {
  828.         LPOLESTR pwcsName;
  829.         DWORD type;
  830.         ULARGE_INTEGER cbSize;
  831.         FILETIME mtime;
  832.         FILETIME ctime;
  833.         FILETIME atime;
  834.         DWORD grfMode;
  835.         DWORD grfLocksSupported;
  836.         CLSID clsid;
  837.         DWORD grfStateBits;
  838.         DWORD reserved;
  839.     } STATSTGO;
  840.  
  841.  
  842.     // Storage element types 
  843.     typedef enum STGTY {
  844.         STGTY_STORAGE   = 1,
  845.         STGTY_STREAM    = 2,
  846.         STGTY_LOCKBYTES = 3,
  847.         STGTY_PROPERTY  = 4
  848.     } STGTY;
  849.  
  850.     typedef enum STREAM_SEEK {
  851.         STREAM_SEEK_SET = 0,
  852.         STREAM_SEEK_CUR = 1,
  853.         STREAM_SEEK_END = 2
  854.     } STREAM_SEEK;
  855.  
  856.     typedef enum LOCKTYPE {
  857.         LOCK_WRITE      = 1,
  858.         LOCK_EXCLUSIVE  = 2,
  859.         LOCK_ONLYONCE   = 4
  860.     } LOCKTYPE;
  861.  
  862.     [local]
  863.     HRESULT Seek(
  864.         [in] LARGE_INTEGER dlibMove,
  865.         [in] DWORD dwOrigin,
  866.         [out] ULARGE_INTEGER *plibNewPosition);
  867.  
  868.     [call_as(Seek)]
  869.     HRESULT RemoteSeek(
  870.         [in] LARGE_INTEGER dlibMove,
  871.         [in] DWORD dwOrigin,
  872.         [out] ULARGE_INTEGER *plibNewPosition);
  873.  
  874.     HRESULT SetSize(
  875.         [in] ULARGE_INTEGER libNewSize);
  876.  
  877.     [local]
  878.     HRESULT CopyTo(
  879.         [in, unique] IStream *pstm,
  880.         [in] ULARGE_INTEGER cb,
  881.         [out] ULARGE_INTEGER *pcbRead,
  882.         [out] ULARGE_INTEGER *pcbWritten);
  883.  
  884.     [call_as(CopyTo)]
  885.     HRESULT RemoteCopyTo(
  886.         [in, unique] IStream *pstm,
  887.         [in] ULARGE_INTEGER cb,
  888.         [out] ULARGE_INTEGER *pcbRead,
  889.         [out] ULARGE_INTEGER *pcbWritten);
  890.  
  891.     HRESULT Commit(
  892.         [in] DWORD grfCommitFlags);
  893.  
  894.     HRESULT Revert();
  895.  
  896.     HRESULT LockRegion(
  897.         [in] ULARGE_INTEGER libOffset,
  898.         [in] ULARGE_INTEGER cb,
  899.         [in] DWORD dwLockType);
  900.  
  901.     HRESULT UnlockRegion(
  902.         [in] ULARGE_INTEGER libOffset,
  903.         [in] ULARGE_INTEGER cb,
  904.         [in] DWORD dwLockType);
  905.  
  906.     HRESULT Stat(
  907.         [out] STATSTG *pstatstg,
  908.         [in] DWORD grfStatFlag);
  909.  
  910.     HRESULT Clone(
  911.         [out] IStream **ppstm);
  912.  
  913. }
  914.  
  915. [
  916.     object,
  917.     uuid(0000000d-0000-0000-C000-000000000046),
  918.     pointer_default(unique)
  919. ]
  920.  
  921. interface IEnumSTATSTG : IUnknown
  922. {
  923.  
  924.     typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
  925.  
  926.     [local]
  927.     HRESULT Next(
  928.         [in] ULONG celt,
  929.         [in] STATSTG *rgelt,
  930.         [out] ULONG *pceltFetched);
  931.  
  932.     [call_as(Next)]
  933.     HRESULT RemoteNext(
  934.         [in] ULONG celt,
  935.         [out, size_is(celt), length_is(*pceltFetched)]
  936.         STATSTG *rgelt,
  937.         [out] ULONG *pceltFetched);
  938.  
  939.     HRESULT Skip(
  940.         [in] ULONG celt);
  941.  
  942.     HRESULT Reset();
  943.  
  944.     HRESULT Clone(
  945.         [out] IEnumSTATSTG **ppenum);
  946. }
  947.  
  948. [
  949.     object,
  950.     uuid(0000000b-0000-0000-C000-000000000046),
  951.     pointer_default(unique)
  952. ]
  953.  
  954. interface IStorage : IUnknown
  955. {
  956.  
  957.     typedef [unique] IStorage * LPSTORAGE;
  958.  
  959.     typedef struct RemSNB {
  960.         unsigned long ulCntStr;
  961.         unsigned long ulCntChar;
  962.         [size_is(ulCntChar)] OLECHAR rgString[];
  963.     } RemSNB;
  964.  
  965.     typedef [unique] RemSNB * wireSNB;
  966.     typedef [wire_marshal(wireSNB)] OLECHAR **SNB;
  967.  
  968.     HRESULT CreateStream(
  969.         [in, string] const OLECHAR *pwcsName,
  970.         [in] DWORD grfMode,
  971.         [in] DWORD reserved1,
  972.         [in] DWORD reserved2,
  973.         [out] IStream **ppstm);
  974.  
  975.     [local]
  976.     HRESULT OpenStream(
  977.         [in, string] const OLECHAR *pwcsName,
  978.         [in, unique] void *reserved1,
  979.         [in] DWORD grfMode,
  980.         [in] DWORD reserved2,
  981.         [out] IStream **ppstm);
  982.  
  983.     [call_as(OpenStream)]
  984.     HRESULT RemoteOpenStream(
  985.         [in, string] const OLECHAR *pwcsName,
  986.         [in] unsigned long cbReserved1,
  987.         [in, unique, size_is(cbReserved1)] byte *reserved1,
  988.         [in] DWORD grfMode,
  989.         [in] DWORD reserved2,
  990.         [out] IStream **ppstm);
  991.  
  992.     HRESULT CreateStorage(
  993.         [in, string] const OLECHAR *pwcsName,
  994.         [in] DWORD grfMode,
  995.         [in] DWORD dwStgFmt,
  996.         [in] DWORD reserved2,
  997.         [out] IStorage **ppstg);
  998.  
  999.     HRESULT OpenStorage(
  1000.         [in, unique, string] const OLECHAR *pwcsName,
  1001.         [in, unique] IStorage *pstgPriority,
  1002.         [in] DWORD grfMode,
  1003.         [in, unique] SNB snbExclude,
  1004.         [in] DWORD reserved,
  1005.         [out] IStorage **ppstg);
  1006.  
  1007.     HRESULT CopyTo(
  1008.         [in] DWORD ciidExclude,
  1009.         [in, unique, size_is(ciidExclude)] IID const *rgiidExclude,
  1010.         [in, unique] SNB snbExclude,
  1011.         [in, unique] IStorage *pstgDest);
  1012.  
  1013.     HRESULT MoveElementTo(
  1014.         [in, string] const OLECHAR * pwcsName,
  1015.         [in, unique] IStorage *pstgDest,
  1016.         [in, string] const OLECHAR *pwcsNewName,
  1017.         [in] DWORD grfFlags);
  1018.  
  1019.     HRESULT Commit(
  1020.         [in] DWORD grfCommitFlags);
  1021.  
  1022.     HRESULT Revert();
  1023.  
  1024.     [local]
  1025.     HRESULT EnumElements(
  1026.         [in] DWORD reserved1,
  1027.         [in, unique, size_is(1)] void *reserved2,
  1028.         [in] DWORD reserved3,
  1029.         [out] IEnumSTATSTG **ppenum);
  1030.  
  1031.  
  1032.     [call_as(EnumElements)]
  1033.     HRESULT RemoteEnumElements(
  1034.         [in] DWORD reserved1,
  1035.         [in] unsigned long cbReserved2,
  1036.         [in, unique, size_is(cbReserved2)] byte *reserved2,
  1037.         [in] DWORD reserved3,
  1038.         [out] IEnumSTATSTG **ppenum);
  1039.  
  1040.     HRESULT DestroyElement(
  1041.         [in, string] const OLECHAR *pwcsName);
  1042.  
  1043.     HRESULT RenameElement(
  1044.         [in, string] const OLECHAR *pwcsOldName,
  1045.         [in, string] const OLECHAR *pwcsNewName);
  1046.  
  1047.     HRESULT SetElementTimes(
  1048.         [in, string] const OLECHAR *pwcsName,
  1049.         [in] LPFILETIME pctime,
  1050.         [in] LPFILETIME patime,
  1051.         [in] LPFILETIME pmtime);
  1052.  
  1053.     HRESULT SetClass(
  1054.         [in] REFCLSID clsid);
  1055.  
  1056.     HRESULT SetStateBits(
  1057.         [in] DWORD grfStateBits,
  1058.         [in] DWORD grfMask);
  1059.  
  1060.     HRESULT Stat(
  1061.         [out] STATSTG *pstatstg,
  1062.         [in] DWORD grfStatFlag);
  1063. }
  1064.  
  1065. #if 0
  1066.  
  1067. [
  1068.     object,
  1069.     uuid(0000010b-0000-0000-C000-000000000046),
  1070.     pointer_default(unique)
  1071. ]
  1072.  
  1073. interface IPersistFile : IPersist
  1074. {
  1075.  
  1076.     typedef [unique] IPersistFile *LPPERSISTFILE;
  1077.  
  1078.     HRESULT IsDirty
  1079.     (
  1080.         void
  1081.     );
  1082.  
  1083.     HRESULT Load
  1084.     (
  1085.         [in] LPCOLESTR pszFileName,
  1086.         [in] DWORD dwMode
  1087.     );
  1088.  
  1089.     HRESULT Save
  1090.     (
  1091.         [in, unique] LPCOLESTR pszFileName,
  1092.         [in] BOOL fRemember
  1093.     );
  1094.  
  1095.     HRESULT SaveCompleted
  1096.     (
  1097.         [in, unique] LPCOLESTR pszFileName
  1098.     );
  1099.  
  1100.     HRESULT GetCurFile
  1101.     (
  1102.         [out] LPOLESTR *ppszFileName
  1103.     );
  1104. }
  1105.  
  1106. [
  1107.     object,
  1108.     uuid(0000010a-0000-0000-C000-000000000046),
  1109.     pointer_default(unique)
  1110. ]
  1111.  
  1112. interface IPersistStorage : IPersist
  1113. {
  1114.  
  1115.     typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
  1116.  
  1117.     HRESULT IsDirty
  1118.     (
  1119.         void
  1120.     );
  1121.  
  1122.     HRESULT InitNew
  1123.     (
  1124.         [in, unique] IStorage *pStg
  1125.     );
  1126.  
  1127.     HRESULT Load
  1128.     (
  1129.         [in, unique] IStorage *pStg
  1130.     );
  1131.  
  1132.     HRESULT Save
  1133.     (
  1134.         [in, unique] IStorage *pStgSave,
  1135.         [in] BOOL fSameAsLoad
  1136.     );
  1137.  
  1138.     HRESULT SaveCompleted
  1139.     (
  1140.         [in, unique] IStorage *pStgNew
  1141.     );
  1142.  
  1143.     HRESULT HandsOffStorage
  1144.     (
  1145.         void
  1146.     );
  1147. }
  1148.  
  1149. [
  1150.     object,
  1151.     uuid(0000000a-0000-0000-C000-000000000046),
  1152.     pointer_default(unique)
  1153. ]
  1154.  
  1155. interface ILockBytes : IUnknown
  1156. {
  1157.  
  1158.     typedef [unique] ILockBytes *LPLOCKBYTES;
  1159.  
  1160.     [local]
  1161.     HRESULT ReadAt(
  1162.         [in] ULARGE_INTEGER ulOffset,
  1163.         [in] void *pv,
  1164.         [in] ULONG cb,
  1165.         [out] ULONG *pcbRead);
  1166.  
  1167.     [call_as(ReadAt)]
  1168.     HRESULT _stdcall RemoteReadAt(
  1169.         [in] ULARGE_INTEGER ulOffset,
  1170.         [out, size_is(cb), length_is(*pcbRead)]
  1171.         byte *pv,
  1172.         [in] ULONG cb,
  1173.         [out] ULONG *pcbRead);
  1174.  
  1175.     [local]
  1176.     HRESULT WriteAt(
  1177.         [in] ULARGE_INTEGER ulOffset,
  1178.         [in] void const *pv,
  1179.         [in] ULONG cb,
  1180.         [out] ULONG *pcbWritten);
  1181.  
  1182.     [call_as(WriteAt)]
  1183.     HRESULT RemoteWriteAt(
  1184.         [in] ULARGE_INTEGER ulOffset,
  1185.         [in, size_is(cb)] byte const *pv,
  1186.         [in] ULONG cb,
  1187.         [out] ULONG *pcbWritten);
  1188.  
  1189.     HRESULT Flush();
  1190.  
  1191.     HRESULT SetSize(
  1192.         [in] ULARGE_INTEGER cb);
  1193.  
  1194.     HRESULT LockRegion(
  1195.         [in] ULARGE_INTEGER libOffset,
  1196.         [in] ULARGE_INTEGER cb,
  1197.         [in] DWORD dwLockType);
  1198.  
  1199.     HRESULT UnlockRegion(
  1200.         [in] ULARGE_INTEGER libOffset,
  1201.         [in] ULARGE_INTEGER cb,
  1202.         [in] DWORD dwLockType);
  1203.  
  1204.     HRESULT Stat(
  1205.         [out] STATSTG *pstatstg,
  1206.         [in] DWORD grfStatFlag);
  1207. }
  1208.  
  1209. [
  1210.     object,
  1211.     uuid(00000103-0000-0000-C000-000000000046),
  1212.     pointer_default(unique)
  1213. ]
  1214.  
  1215. interface IEnumFORMATETC : IUnknown
  1216. {
  1217.  
  1218.     typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
  1219.  
  1220.  
  1221.     typedef struct DVTARGETDEVICE {
  1222.         DWORD tdSize;
  1223.         WORD tdDriverNameOffset;
  1224.         WORD tdDeviceNameOffset;
  1225.         WORD tdPortNameOffset;
  1226.         WORD tdExtDevmodeOffset;
  1227.         [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
  1228.         BYTE tdData[];
  1229.     } DVTARGETDEVICE;
  1230.  
  1231.  
  1232.     typedef CLIPFORMAT *LPCLIPFORMAT;
  1233.  
  1234.     typedef struct tagFORMATETC {
  1235.         CLIPFORMAT cfFormat;
  1236.         [unique] DVTARGETDEVICE * ptd;
  1237.         DWORD dwAspect;
  1238.         LONG lindex;
  1239.         DWORD tymed;
  1240.     }FORMATETC, *LPFORMATETC;
  1241.  
  1242.     [local]
  1243.     HRESULT Next(
  1244.         [in] ULONG celt,
  1245.         [out] FORMATETC *rgelt,
  1246.         [out] ULONG *pceltFetched);
  1247.  
  1248.     [call_as(Next)]
  1249.     HRESULT RemoteNext(
  1250.         [in] ULONG celt,
  1251.         [out, size_is(celt), length_is(*pceltFetched )]
  1252.         FORMATETC *rgelt,
  1253.         [out] ULONG *pceltFetched);
  1254.  
  1255.     HRESULT Skip(
  1256.         [in] ULONG celt);
  1257.  
  1258.     HRESULT Reset();
  1259.  
  1260.     HRESULT Clone(
  1261.         [out] IEnumFORMATETC **ppenum);
  1262. }
  1263.  
  1264. [
  1265.     object,
  1266.     uuid(00000105-0000-0000-C000-000000000046),
  1267.     pointer_default(unique)
  1268. ]
  1269.  
  1270. interface IEnumSTATDATA : IUnknown
  1271. {
  1272.  
  1273.     typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
  1274.  
  1275.     //Advise Flags
  1276.     typedef enum ADVF {
  1277.         ADVF_NODATA = 1,
  1278.         ADVF_PRIMEFIRST = 2,
  1279.         ADVF_ONLYONCE = 4,
  1280.         ADVF_DATAONSTOP = 64,
  1281.         ADVFCACHE_NOHANDLER = 8,
  1282.         ADVFCACHE_FORCEBUILTIN = 16,
  1283.         ADVFCACHE_ONSAVE = 32
  1284.     } ADVF;
  1285.  
  1286.  
  1287.     // Stats for data; used by several enumerations and by at least one
  1288.     // implementation of IDataAdviseHolder; if a field is not used, it
  1289.     // will be NULL.
  1290.  
  1291.     typedef struct STATDATA {                              // field used by:
  1292.         FORMATETC formatetc;       // EnumAdvise, EnumData (cache), EnumFormats
  1293.         DWORD advf;                // EnumAdvise, EnumData (cache)
  1294.         [unique] IAdviseSink * pAdvSink; // EnumAdvise
  1295.         DWORD dwConnection;        // EnumAdvise
  1296.     } STATDATA;
  1297.     typedef STATDATA *LPSTATDATA;
  1298.  
  1299.     [local]
  1300.     HRESULT Next(
  1301.         [in] ULONG celt,
  1302.         STATDATA *rgelt,
  1303.         [out] ULONG *pceltFetched);
  1304.  
  1305.     [call_as(Next)]
  1306.     HRESULT RemoteNext(
  1307.         [in] ULONG celt,
  1308.         [out, size_is(celt), length_is(*pceltFetched)]
  1309.         STATDATA *rgelt,
  1310.         [out] ULONG *pceltFetched);
  1311.  
  1312.     HRESULT Skip(
  1313.         [in] ULONG celt);
  1314.  
  1315.     HRESULT Reset();
  1316.  
  1317.     HRESULT Clone(
  1318.         [out] IEnumSTATDATA **ppenum);
  1319. }
  1320.  
  1321. [
  1322.     object,
  1323.     uuid(00000012-0000-0000-C000-000000000046),
  1324.     pointer_default(unique)
  1325. ]
  1326.  
  1327. interface IRootStorage : IUnknown
  1328. {
  1329.  
  1330.     typedef [unique] IRootStorage *LPROOTSTORAGE;
  1331.  
  1332.     HRESULT SwitchToFile
  1333.     (
  1334.         [in] LPOLESTR pszFile
  1335.     );
  1336. }
  1337.  
  1338. /****************************************************************************
  1339.  *  Notification Interfaces
  1340.  ****************************************************************************/
  1341.  
  1342. [
  1343.     object,
  1344.     uuid(0000010f-0000-0000-C000-000000000046),
  1345.     pointer_default(unique)
  1346. ]
  1347.  
  1348. interface IAdviseSink : IUnknown
  1349. {
  1350.  
  1351.     typedef IAdviseSink *LPADVISESINK;
  1352.  
  1353.     typedef [v1_enum] enum tagTYMED {
  1354.         TYMED_HGLOBAL = 1,
  1355.         TYMED_FILE = 2,
  1356.         TYMED_ISTREAM = 4,
  1357.         TYMED_ISTORAGE = 8,
  1358.         TYMED_GDI = 16,
  1359.         TYMED_MFPICT = 32,
  1360.         TYMED_ENHMF = 64,
  1361.         TYMED_NULL = 0
  1362.     } TYMED;
  1363.  
  1364.     cpp_quote("#ifndef RC_INVOKED")
  1365.     cpp_quote("#pragma warning(disable:4200)")
  1366.     cpp_quote("#endif")
  1367.  
  1368.     typedef struct tagRemSTGMEDIUM {
  1369.         DWORD tymed;
  1370.         DWORD dwHandleType;
  1371.         unsigned long pData;
  1372.         unsigned long pUnkForRelease;
  1373.         unsigned long cbData;
  1374.         [size_is(cbData)] byte data[];
  1375.     } RemSTGMEDIUM;
  1376.     cpp_quote("#ifndef RC_INVOKED")
  1377.     cpp_quote("#pragma warning(default:4200)")
  1378.     cpp_quote("#endif")
  1379.  
  1380.  
  1381. cpp_quote("#ifdef NONAMELESSUNION")
  1382. cpp_quote("typedef struct tagSTGMEDIUM {")
  1383. cpp_quote("    DWORD tymed;")
  1384. cpp_quote("    union {")
  1385. cpp_quote("        HBITMAP hBitmap;")
  1386. cpp_quote("        HMETAFILEPICT hMetaFilePict;")
  1387. cpp_quote("        HENHMETAFILE hEnhMetaFile;")
  1388. cpp_quote("        HGLOBAL hGlobal;")
  1389. cpp_quote("        LPOLESTR lpszFileName;")
  1390. cpp_quote("        IStream *pstm;")
  1391. cpp_quote("        IStorage *pstg;")
  1392. cpp_quote("        } u;")
  1393. cpp_quote("    IUnknown *pUnkForRelease;")
  1394. cpp_quote("}uSTGMEDIUM;")
  1395. cpp_quote("#else")
  1396.  
  1397.     typedef struct tagSTGMEDIUM {
  1398.     DWORD tymed;
  1399.     [switch_type(DWORD), switch_is((DWORD) tymed)]
  1400.         union
  1401.         {
  1402.         [case(TYMED_GDI)]
  1403.             HBITMAP hBitmap;
  1404.         [case(TYMED_MFPICT)]
  1405.             HMETAFILEPICT hMetaFilePict;
  1406.         [case(TYMED_ENHMF)]
  1407.             HENHMETAFILE hEnhMetaFile;
  1408.         [case(TYMED_HGLOBAL)]
  1409.             HGLOBAL hGlobal;
  1410.         [case(TYMED_FILE)]
  1411.             LPOLESTR lpszFileName;
  1412.         [case(TYMED_ISTREAM)]
  1413.             IStream *pstm;
  1414.         [case(TYMED_ISTORAGE)]
  1415.             IStorage *pstg;
  1416.         [default]
  1417.                 ;
  1418.         };
  1419.         [unique] IUnknown *pUnkForRelease;
  1420.     }uSTGMEDIUM;
  1421.  
  1422. cpp_quote("#endif /* !NONAMELESSUNION */")
  1423.  
  1424.  
  1425. //
  1426. //  wireSTGMEDIUM
  1427. //
  1428. // These flags are #defined (not enumerated) in wingdi.
  1429. // We need to repeat #defines to avoid conflict in the generated file.
  1430. //
  1431.  
  1432. /* Object Definitions for EnumObjects() */
  1433. #define OBJ_PEN             1
  1434. #define OBJ_BRUSH           2
  1435. #define OBJ_DC              3
  1436. #define OBJ_METADC          4
  1437. #define OBJ_PAL             5
  1438. #define OBJ_FONT            6
  1439. #define OBJ_BITMAP          7
  1440. #define OBJ_REGION          8
  1441. #define OBJ_METAFILE        9
  1442. #define OBJ_MEMDC           10
  1443. #define OBJ_EXTPEN          11
  1444. #define OBJ_ENHMETADC       12
  1445. #define OBJ_ENHMETAFILE     13
  1446.  
  1447.     typedef union _GDI_OBJECT switch( DWORD ObjectType ) u
  1448.     {
  1449.         case OBJ_BITMAP:    wireHBITMAP     hBitmap;
  1450.         case OBJ_PAL:       wireHPALETTE    hPalette;
  1451.         default:            wireHGLOBAL     hGeneric;
  1452.     } GDI_OBJECT;
  1453.  
  1454.     typedef struct _userSTGMEDIUM
  1455.     {
  1456.         union _STGMEDIUM_UNION switch( DWORD tymed ) u
  1457.         {
  1458.         case TYMED_NULL:        ;
  1459.         case TYMED_MFPICT:      wireHMETAFILEPICT   hMetaFilePict;
  1460.         case TYMED_ENHMF:       wireHENHMETAFILE    hHEnhMetaFile;
  1461.         case TYMED_GDI:         GDI_OBJECT *        hGdiHandle;
  1462.         case TYMED_HGLOBAL:     wireHGLOBAL         hGlobal;
  1463.         case TYMED_FILE:        LPOLESTR            lpszFileName;
  1464.         case TYMED_ISTREAM:     BYTE_BLOB *         pstm;
  1465.         case TYMED_ISTORAGE:    BYTE_BLOB *         pstg;
  1466.         };
  1467.         IUnknown *              pUnkForRelease;
  1468.     } userSTGMEDIUM;
  1469.  
  1470.     typedef [unique] userSTGMEDIUM  * wireSTGMEDIUM;
  1471.     typedef [wire_marshal( wireSTGMEDIUM )] uSTGMEDIUM STGMEDIUM;
  1472.  
  1473.     typedef [unique] userSTGMEDIUM  * wireASYNC_STGMEDIUM;
  1474.     typedef [wire_marshal( wireASYNC_STGMEDIUM )] STGMEDIUM ASYNC_STGMEDIUM;
  1475.  
  1476.     typedef STGMEDIUM *LPSTGMEDIUM;
  1477.  
  1478.     typedef struct _userFLAG_STGMEDIUM
  1479.     {
  1480.         long                ContextFlags;
  1481.         long                fPassOwnership;
  1482.         userSTGMEDIUM       Stgmed;
  1483.     } userFLAG_STGMEDIUM;
  1484.  
  1485.     typedef [unique] userFLAG_STGMEDIUM  * wireFLAG_STGMEDIUM;
  1486.  
  1487.     typedef [wire_marshal( wireFLAG_STGMEDIUM )]
  1488.         struct _FLAG_STGMEDIUM
  1489.         {
  1490.                 long                ContextFlags;
  1491.                 long                fPassOwnership;
  1492.                 STGMEDIUM           Stgmed;
  1493.         } FLAG_STGMEDIUM;
  1494.  
  1495.  
  1496.     [local]
  1497.     void OnDataChange(
  1498.         [in, unique] FORMATETC *pFormatetc,
  1499.         [in, unique] STGMEDIUM *pStgmed);
  1500.  
  1501.     [call_as(OnDataChange), async]
  1502.     void RemoteOnDataChange(
  1503.         [in, unique] FORMATETC *pFormatetc,
  1504.         [in, unique] ASYNC_STGMEDIUM *pStgmed);
  1505.  
  1506.     [local]
  1507.     void OnViewChange(
  1508.         [in] DWORD dwAspect,
  1509.         [in] LONG lindex);
  1510.  
  1511.     [call_as(OnViewChange), async]
  1512.     void RemoteOnViewChange(
  1513.         [in] DWORD dwAspect,
  1514.         [in] LONG lindex);
  1515.  
  1516.     [local]
  1517.     void OnRename(
  1518.         [in] IMoniker *pmk);
  1519.  
  1520.     [call_as(OnRename), async]
  1521.     void RemoteOnRename(
  1522.         [in] IMoniker *pmk);
  1523.  
  1524.     [local]
  1525.     void OnSave();
  1526.  
  1527.     [call_as(OnSave), async]
  1528.     void RemoteOnSave();
  1529.  
  1530.     [local]
  1531.     void OnClose();
  1532.  
  1533.     [call_as(OnClose)]
  1534.     HRESULT RemoteOnClose();
  1535. }
  1536.  
  1537. [
  1538.     object,
  1539.     uuid(00000125-0000-0000-C000-000000000046),
  1540.     pointer_default(unique)
  1541. ]
  1542.  
  1543. interface IAdviseSink2 : IAdviseSink
  1544. {
  1545.  
  1546.     typedef [unique] IAdviseSink2 *LPADVISESINK2;
  1547.  
  1548.     [local]
  1549.     void OnLinkSrcChange(
  1550.         [in, unique] IMoniker *pmk);
  1551.  
  1552.     [call_as(OnLinkSrcChange), async]
  1553.     void RemoteOnLinkSrcChange(
  1554.         [in, unique] IMoniker *pmk);
  1555. }
  1556.  
  1557. [
  1558.     object,
  1559.     uuid(0000010e-0000-0000-C000-000000000046),
  1560.     pointer_default(unique)
  1561. ]
  1562.  
  1563. interface IDataObject : IUnknown
  1564. {
  1565.  
  1566.     typedef [unique] IDataObject *LPDATAOBJECT;
  1567.  
  1568.     //DATA format DIRection
  1569.     typedef enum tagDATADIR
  1570.     {
  1571.         DATADIR_GET = 1,
  1572.         DATADIR_SET = 2
  1573.     } DATADIR;
  1574.  
  1575.     [local]
  1576.     HRESULT GetData(
  1577.         [in, unique] FORMATETC *pformatetcIn,
  1578.         [out] STGMEDIUM *pmedium);
  1579.  
  1580.     [call_as(GetData)]
  1581.     HRESULT RemoteGetData(
  1582.         [in, unique] FORMATETC *pformatetcIn,
  1583.         [out] STGMEDIUM *pRemoteMedium);
  1584.  
  1585.     [local]
  1586.     HRESULT GetDataHere(
  1587.         [in, unique] FORMATETC *pformatetc,
  1588.         [in, out] STGMEDIUM *pmedium);
  1589.  
  1590.     [call_as(GetDataHere)]
  1591.     HRESULT RemoteGetDataHere(
  1592.         [in, unique] FORMATETC *pformatetc,
  1593.         [in, out] STGMEDIUM *pRemoteMedium);
  1594.  
  1595.     HRESULT QueryGetData(
  1596.         [in, unique] FORMATETC *pformatetc);
  1597.  
  1598.  
  1599.     HRESULT GetCanonicalFormatEtc(
  1600.         [in, unique] FORMATETC *pformatectIn,
  1601.         [out] FORMATETC *pformatetcOut);
  1602.  
  1603.     [local]
  1604.     HRESULT SetData(
  1605.         [in, unique] FORMATETC *pformatetc,
  1606.         [in, unique] STGMEDIUM *pmedium,
  1607.         [in] BOOL fRelease);
  1608.  
  1609.     [call_as(SetData)]
  1610.     HRESULT RemoteSetData(
  1611.         [in, unique] FORMATETC *pformatetc,
  1612.         [in, unique] FLAG_STGMEDIUM *pmedium,
  1613.         [in] BOOL fRelease);
  1614.  
  1615.     HRESULT EnumFormatEtc(
  1616.         [in] DWORD dwDirection,
  1617.         [out] IEnumFORMATETC **ppenumFormatEtc);
  1618.  
  1619.     HRESULT DAdvise(
  1620.         [in] FORMATETC *pformatetc,
  1621.         [in] DWORD advf,
  1622.         [in, unique] IAdviseSink *pAdvSink,
  1623.         [out] DWORD *pdwConnection);
  1624.  
  1625.     HRESULT DUnadvise(
  1626.         [in] DWORD dwConnection);
  1627.  
  1628.     HRESULT EnumDAdvise(
  1629.         [out] IEnumSTATDATA **ppenumAdvise);
  1630.  
  1631. }
  1632.  
  1633. [
  1634.     local,
  1635.     object,
  1636.     uuid(00000110-0000-0000-C000-000000000046)
  1637. ]
  1638.  
  1639. interface IDataAdviseHolder : IUnknown
  1640. {
  1641.  
  1642.     typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
  1643.  
  1644.     HRESULT Advise
  1645.     (
  1646.         [in, unique] IDataObject *pDataObject,
  1647.         [in, unique] FORMATETC *pFetc,
  1648.         [in] DWORD advf,
  1649.         [in, unique] IAdviseSink *pAdvise,
  1650.         [out] DWORD *pdwConnection
  1651.     );
  1652.  
  1653.     HRESULT Unadvise
  1654.     (
  1655.         [in] DWORD dwConnection
  1656.     );
  1657.  
  1658.     HRESULT EnumAdvise
  1659.     (
  1660.         [out] IEnumSTATDATA **ppenumAdvise
  1661.     );
  1662.  
  1663.     HRESULT SendOnDataChange
  1664.     (
  1665.         [in, unique] IDataObject *pDataObject,
  1666.         [in] DWORD dwReserved,
  1667.         [in] DWORD advf
  1668.     );
  1669.  
  1670. }
  1671.  
  1672. [
  1673.     local,
  1674.     object,
  1675.     uuid(00000016-0000-0000-C000-000000000046)
  1676. ]
  1677.  
  1678. interface IMessageFilter : IUnknown
  1679. {
  1680.  
  1681.     typedef [unique] IMessageFilter *LPMESSAGEFILTER;
  1682.  
  1683. // call type used by IMessageFilter::HandleIncomingMessage
  1684. typedef enum tagCALLTYPE
  1685. {
  1686.     CALLTYPE_TOPLEVEL = 1,      // toplevel call - no outgoing call
  1687.     CALLTYPE_NESTED   = 2,      // callback on behalf of previous outgoing call - should always handle
  1688.     CALLTYPE_ASYNC    = 3,      // aysnchronous call - can NOT be rejected
  1689.     CALLTYPE_TOPLEVEL_CALLPENDING = 4,  // new toplevel call with new LID
  1690.     CALLTYPE_ASYNC_CALLPENDING    = 5   // async call - can NOT be rejected
  1691. } CALLTYPE;
  1692.  
  1693. // status of server call - returned by IMessageFilter::HandleIncomingCall
  1694. // and passed to  IMessageFilter::RetryRejectedCall
  1695. typedef enum tagSERVERCALL
  1696. {
  1697.     SERVERCALL_ISHANDLED    = 0,
  1698.     SERVERCALL_REJECTED     = 1,
  1699.     SERVERCALL_RETRYLATER   = 2
  1700. } SERVERCALL;
  1701.  
  1702. // Pending type indicates the level of nesting
  1703. typedef enum tagPENDINGTYPE
  1704. {
  1705.     PENDINGTYPE_TOPLEVEL = 1, // toplevel call
  1706.     PENDINGTYPE_NESTED   = 2  // nested call
  1707. } PENDINGTYPE;
  1708.  
  1709. // return values of MessagePending
  1710. typedef enum tagPENDINGMSG
  1711. {
  1712.     PENDINGMSG_CANCELCALL  = 0, // cancel the outgoing call
  1713.     PENDINGMSG_WAITNOPROCESS  = 1, // wait for the return and don't dispatch the message
  1714.     PENDINGMSG_WAITDEFPROCESS = 2  // wait and dispatch the message
  1715.  
  1716. } PENDINGMSG;
  1717.  
  1718. // additional interface information about the incoming call
  1719. typedef struct INTERFACEINFO
  1720. {
  1721.     IUnknown    *pUnk;      // the pointer to the object
  1722.     IID         iid;        // interface id
  1723.     WORD        wMethod;    // interface method
  1724. } INTERFACEINFO, *LPINTERFACEINFO;
  1725.  
  1726.     DWORD HandleInComingCall
  1727.     (
  1728.         [in] DWORD dwCallType,
  1729.         [in] HTASK htaskCaller,
  1730.         [in] DWORD dwTickCount,
  1731.         [in] LPINTERFACEINFO lpInterfaceInfo
  1732.     );
  1733.  
  1734.     DWORD RetryRejectedCall
  1735.     (
  1736.         [in] HTASK htaskCallee,
  1737.         [in] DWORD dwTickCount,
  1738.         [in] DWORD dwRejectType
  1739.     );
  1740.  
  1741.     DWORD MessagePending
  1742.     (
  1743.         [in] HTASK htaskCallee,
  1744.         [in] DWORD dwTickCount,
  1745.         [in] DWORD dwPendingType
  1746.     );
  1747. }
  1748.  
  1749.  
  1750. /****************************************************************************
  1751.  *  Object Remoting Interfaces
  1752.  ****************************************************************************/
  1753.  
  1754. [
  1755.     local,
  1756.     object,
  1757.     uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
  1758. ]
  1759. interface IRpcChannelBuffer : IUnknown
  1760. {
  1761.  
  1762.     typedef unsigned long RPCOLEDATAREP;
  1763.  
  1764.     typedef struct tagRPCOLEMESSAGE
  1765.     {
  1766.         void             *reserved1;
  1767.         RPCOLEDATAREP     dataRepresentation;
  1768.         void             *Buffer;
  1769.         ULONG             cbBuffer;
  1770.         ULONG             iMethod;
  1771.         void             *reserved2[5];
  1772.         ULONG             rpcFlags;
  1773.     } RPCOLEMESSAGE;
  1774.  
  1775.     typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
  1776.  
  1777.     HRESULT GetBuffer
  1778.     (
  1779.         [in] RPCOLEMESSAGE *pMessage,
  1780.         [in] REFIID riid
  1781.     );
  1782.  
  1783.     HRESULT SendReceive
  1784.     (
  1785.         [in,out] RPCOLEMESSAGE *pMessage,
  1786.         [out] ULONG *pStatus
  1787.     );
  1788.  
  1789.     HRESULT FreeBuffer
  1790.     (
  1791.         [in] RPCOLEMESSAGE *pMessage
  1792.     );
  1793.  
  1794.     HRESULT GetDestCtx
  1795.     (
  1796.         [out] DWORD *pdwDestContext,
  1797.         [out] void **ppvDestContext
  1798.     );
  1799.  
  1800.     HRESULT IsConnected
  1801.     (
  1802.         void
  1803.     );
  1804.  
  1805. }
  1806.  
  1807. [
  1808.     local,
  1809.     object,
  1810.     uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
  1811. ]
  1812. interface IRpcProxyBuffer : IUnknown
  1813. {
  1814.  
  1815.     HRESULT Connect
  1816.     (
  1817.         [in, unique] IRpcChannelBuffer *pRpcChannelBuffer
  1818.     );
  1819.  
  1820.     void Disconnect
  1821.     (
  1822.         void
  1823.     );
  1824.  
  1825. }
  1826.  
  1827. [
  1828.     local,
  1829.     object,
  1830.     uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
  1831. ]
  1832. interface IRpcStubBuffer : IUnknown
  1833. {
  1834.  
  1835.     HRESULT Connect
  1836.     (
  1837.         [in] IUnknown *pUnkServer
  1838.     );
  1839.  
  1840.     void Disconnect();
  1841.  
  1842.     HRESULT Invoke
  1843.     (
  1844.         [in] RPCOLEMESSAGE *_prpcmsg,
  1845.         [in] IRpcChannelBuffer *_pRpcChannelBuffer
  1846.     );
  1847.  
  1848.     IRpcStubBuffer *IsIIDSupported
  1849.     (
  1850.         [in] REFIID riid
  1851.     );
  1852.  
  1853.     ULONG CountRefs
  1854.     (
  1855.         void
  1856.     );
  1857.  
  1858.     HRESULT DebugServerQueryInterface
  1859.     (
  1860.         void **ppv
  1861.     );
  1862.  
  1863.     void DebugServerRelease
  1864.     (
  1865.         void *pv
  1866.     );
  1867.  
  1868. }
  1869.  
  1870.  
  1871.  
  1872. [
  1873.     local,
  1874.     object,
  1875.     uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
  1876. ]
  1877. interface IPSFactoryBuffer : IUnknown
  1878. {
  1879.  
  1880.     HRESULT CreateProxy
  1881.     (
  1882.         [in] IUnknown *pUnkOuter,
  1883.         [in] REFIID riid,
  1884.         [out] IRpcProxyBuffer **ppProxy,
  1885.     [out] void **ppv
  1886.     );
  1887.  
  1888.     HRESULT CreateStub
  1889.     (
  1890.         [in] REFIID riid,
  1891.         [in, unique] IUnknown *pUnkServer,
  1892.         [out] IRpcStubBuffer **ppStub
  1893.     );
  1894. }
  1895.  
  1896. [
  1897.     local,
  1898.     object,
  1899.     uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)
  1900. ]
  1901. interface IChannelHook : IUnknown
  1902. {
  1903.     void ClientGetSize(
  1904.         [in]  REFGUID uExtent,
  1905.         [in]  REFIID  riid,
  1906.         [out] ULONG  *pDataSize );
  1907.  
  1908.     void ClientFillBuffer(
  1909.         [in]      REFGUID uExtent,
  1910.         [in]      REFIID  riid,
  1911.         [in, out] ULONG  *pDataSize,
  1912.         [in]      void   *pDataBuffer );
  1913.  
  1914.     void ClientNotify(
  1915.         [in] REFGUID uExtent,
  1916.         [in] REFIID  riid,
  1917.         [in] ULONG   cbDataSize,
  1918.         [in] void   *pDataBuffer,
  1919.         [in] DWORD   lDataRep,
  1920.         [in] HRESULT hrFault );
  1921.  
  1922.     void ServerNotify(
  1923.         [in] REFGUID uExtent,
  1924.         [in] REFIID  riid,
  1925.         [in] ULONG   cbDataSize,
  1926.         [in] void   *pDataBuffer,
  1927.         [in] DWORD   lDataRep );
  1928.  
  1929.     void ServerGetSize(
  1930.         [in]  REFGUID uExtent,
  1931.         [in]  REFIID  riid,
  1932.         [in]  HRESULT hrFault,
  1933.         [out] ULONG  *pDataSize );
  1934.  
  1935.     void ServerFillBuffer(
  1936.         [in]      REFGUID uExtent,
  1937.         [in]      REFIID  riid,
  1938.         [in, out] ULONG  *pDataSize,
  1939.         [in]      void   *pDataBuffer,
  1940.         [in]      HRESULT hrFault );
  1941. };
  1942.  
  1943. /****************************************************************************
  1944.  *  Property Storage Interfaces
  1945.  ****************************************************************************/
  1946.  
  1947. interface IEnumSTATPROPSTG;
  1948. interface IEnumSTATPROPSETSTG;
  1949.  
  1950. [
  1951.     object,
  1952.     uuid(00000138-0000-0000-C000-000000000046),
  1953.     pointer_default(unique)
  1954. ]
  1955.  
  1956. interface IPropertyStorage : IUnknown
  1957. {
  1958.  
  1959.     typedef GUID            FMTID;
  1960.  
  1961.     cpp_quote("#ifdef __cplusplus")
  1962.     cpp_quote("#define REFFMTID const FMTID &")
  1963.     cpp_quote("#else")
  1964.     cpp_quote("#define REFFMTID const FMTID * const")
  1965.     cpp_quote("#endif")
  1966.  
  1967.     cpp_quote("#if 0 // for MIDL processing only!!")
  1968.     typedef const GUID * REFFMTID ;
  1969.     cpp_quote("#endif //if 0: for MIDL processing only!!")
  1970.  
  1971.     const DWORD PROPSETFLAG_DEFAULT = 0;
  1972.     const DWORD PROPSETFLAG_NONSIMPLE = 1;
  1973.     const DWORD PROPSETFLAG_ANSI = 2;
  1974.  
  1975.     typedef [unique] IPropertyStorage * LPPROPERTYSTORAGE;
  1976.  
  1977.     typedef struct tagPROPVARIANT PROPVARIANT;
  1978.  
  1979.     #define TYPEDEF_CA(type, name) \
  1980.         typedef struct tag##name\
  1981.         {\
  1982.             ULONG   cElems;\
  1983.             [size_is( cElems )]\
  1984.             type *  pElems;\
  1985.         } name
  1986.  
  1987.     TYPEDEF_CA(unsigned char,       CAUB);
  1988.     TYPEDEF_CA(short,               CAI);
  1989.     TYPEDEF_CA(USHORT,              CAUI);
  1990.     TYPEDEF_CA(long,                CAL);
  1991.     TYPEDEF_CA(ULONG,               CAUL);
  1992.     TYPEDEF_CA(float,               CAFLT);
  1993.     TYPEDEF_CA(double,              CADBL);
  1994.     TYPEDEF_CA(CY,                  CACY);
  1995.     TYPEDEF_CA(DATE,                CADATE);
  1996.     TYPEDEF_CA(BSTR,                CABSTR);
  1997.     TYPEDEF_CA(VARIANT_BOOL,        CABOOL);
  1998.     TYPEDEF_CA(SCODE,               CASCODE);
  1999.     TYPEDEF_CA(PROPVARIANT,         CAPROPVARIANT);
  2000.     TYPEDEF_CA(LARGE_INTEGER,       CAH);
  2001.     TYPEDEF_CA(ULARGE_INTEGER,      CAUH);
  2002.     TYPEDEF_CA(LPSTR,               CALPSTR);
  2003.     TYPEDEF_CA(LPWSTR,              CALPWSTR);
  2004.     TYPEDEF_CA(FILETIME,            CAFILETIME);
  2005.     TYPEDEF_CA(CLIPDATA,            CACLIPDATA);
  2006.     TYPEDEF_CA(CLSID,               CACLSID);
  2007.  
  2008.     struct PROPVARIANT
  2009.     {
  2010.         VARTYPE vt;
  2011.         WORD    wReserved1;
  2012.         WORD    wReserved2;
  2013.         WORD    wReserved3;
  2014.         [switch_is((unsigned short) (vt & 0x1fff))] union
  2015.         {
  2016.             [case(VT_EMPTY, VT_NULL)]
  2017.                 ;
  2018.             [case(VT_UI1)]
  2019.                 UCHAR               bVal;
  2020.             [case(VT_I2)]
  2021.                 short               iVal;
  2022.             [case(VT_UI2)]
  2023.                 USHORT              uiVal;
  2024.             [case(VT_BOOL)]
  2025.                 VARIANT_BOOL        bool;
  2026.             [case(VT_I4)]
  2027.                 long                lVal;
  2028.             [case(VT_UI4)]
  2029.                 ULONG               ulVal;
  2030.             [case(VT_R4)]
  2031.                 float               fltVal;
  2032.             [case(VT_ERROR)]
  2033.                 SCODE               scode;
  2034.             [case(VT_I8)]
  2035.                 LARGE_INTEGER       hVal;
  2036.             [case(VT_UI8)]
  2037.                 ULARGE_INTEGER      uhVal;
  2038.             [case(VT_R8)]
  2039.                 double              dblVal;
  2040.             [case(VT_CY)]
  2041.                 CY                  cyVal;
  2042.             [case(VT_DATE)]
  2043.                 DATE                date;
  2044.             [case(VT_FILETIME)]
  2045.                 FILETIME            filetime;
  2046.             [case(VT_CLSID)]
  2047.                 CLSID *             puuid;
  2048.             [case(VT_BLOB, VT_BLOB_OBJECT)]
  2049.                 BLOB                blob;
  2050.             [case(VT_CF)]
  2051.                 CLIPDATA            *pclipdata;
  2052.             [case(VT_STREAM, VT_STREAMED_OBJECT)]
  2053.                 IStream *           pStream;
  2054.             [case(VT_STORAGE, VT_STORED_OBJECT)]
  2055.                 IStorage *          pStorage;
  2056.             [case(VT_BSTR)]
  2057.                 BSTR                bstrVal;
  2058.             [case(VT_LPSTR)]
  2059.                 LPSTR               pszVal;
  2060.             [case(VT_LPWSTR)]
  2061.                 LPWSTR              pwszVal;
  2062.             [case(VT_UI1|VT_VECTOR)]
  2063.                 CAUB                caub;
  2064.             [case(VT_I2|VT_VECTOR)]
  2065.                 CAI                 cai;
  2066.             [case(VT_UI2|VT_VECTOR)]
  2067.                 CAUI                caui;
  2068.             [case(VT_BOOL|VT_VECTOR)]
  2069.                 CABOOL              cabool;
  2070.             [case(VT_I4|VT_VECTOR)]
  2071.                 CAL                 cal;
  2072.             [case(VT_UI4|VT_VECTOR)]
  2073.                 CAUL                caul;
  2074.             [case(VT_R4|VT_VECTOR)]
  2075.                 CAFLT               caflt;
  2076.             [case(VT_ERROR|VT_VECTOR)]
  2077.                 CASCODE             cascode;
  2078.             [case(VT_I8|VT_VECTOR)]
  2079.                 CAH                 cah;
  2080.             [case(VT_UI8|VT_VECTOR)]
  2081.                 CAUH                cauh;
  2082.             [case(VT_R8|VT_VECTOR)]
  2083.                 CADBL               cadbl;
  2084.             [case(VT_CY|VT_VECTOR)]
  2085.                 CACY                cacy;
  2086.             [case(VT_DATE|VT_VECTOR)]
  2087.                 CADATE              cadate;
  2088.             [case(VT_FILETIME|VT_VECTOR)]
  2089.                 CAFILETIME          cafiletime;
  2090.             [case(VT_CLSID|VT_VECTOR)]
  2091.                 CACLSID             cauuid;
  2092.             [case(VT_CF|VT_VECTOR)]
  2093.                 CACLIPDATA          caclipdata;
  2094.             [case(VT_BSTR|VT_VECTOR)]
  2095.                 CABSTR              cabstr;
  2096.             [case(VT_LPSTR|VT_VECTOR)]
  2097.                 CALPSTR             calpstr;
  2098.             [case(VT_LPWSTR|VT_VECTOR)]
  2099.                 CALPWSTR            calpwstr;
  2100.             [case(VT_VARIANT|VT_VECTOR)]
  2101.                 CAPROPVARIANT       capropvar;
  2102.         };
  2103.     };
  2104.  
  2105.     typedef struct PROPVARIANT * LPPROPVARIANT;
  2106.  
  2107.     const PROPID PID_DICTIONARY         = 0x00000000;
  2108.     const PROPID PID_CODEPAGE           = 0x00000001;
  2109.     const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff;
  2110.     const PROPID PID_LOCALE             = 0x80000000;
  2111.     const PROPID PID_MODIFY_TIME        = 0x80000001;
  2112.     const PROPID PID_SECURITY           = 0x80000002;
  2113.     const PROPID PID_ILLEGAL            = 0xffffffff;
  2114.  
  2115.  
  2116.     const ULONG PRSPEC_INVALID = 0xffffffff;
  2117.     const ULONG PRSPEC_LPWSTR = 0;
  2118.     const ULONG PRSPEC_PROPID = 1;
  2119.  
  2120.     typedef struct PROPSPEC
  2121.     {
  2122.  
  2123.         ULONG   ulKind;
  2124.         [switch_is(ulKind)] union
  2125.         {
  2126.             [case(PRSPEC_PROPID)]
  2127.                 PROPID      propid;
  2128.             [case(PRSPEC_LPWSTR)]
  2129.                 LPOLESTR    lpwstr;
  2130.             [default] ;
  2131.         } ;
  2132.  
  2133.     } PROPSPEC;
  2134.  
  2135.     typedef struct STATPROPSTG
  2136.     {
  2137.  
  2138.         LPOLESTR    lpwstrName;
  2139.         PROPID      propid;
  2140.         VARTYPE     vt;
  2141.  
  2142.     } STATPROPSTG;
  2143.  
  2144.     typedef struct STATPROPSETSTG
  2145.     {
  2146.  
  2147.         FMTID       fmtid;
  2148.         CLSID       clsid;
  2149.         DWORD       grfFlags;
  2150.         CURRENCY    mtime;
  2151.         CURRENCY    ctime;
  2152.         CURRENCY    atime;
  2153.  
  2154.     } STATPROPSETSTG;
  2155.  
  2156.     typedef struct STATPROPSETSTGO
  2157.     {
  2158.  
  2159.         FMTID       fmtid;
  2160.         CLSID       clsid;
  2161.         DWORD       grfFlags;
  2162.         FILETIME    mtime;
  2163.         FILETIME    ctime;
  2164.         FILETIME    atime;
  2165.  
  2166.     } STATPROPSETSTGO;
  2167.  
  2168.     HRESULT ReadMultiple(
  2169.         [in]    ULONG                   cpspec,
  2170.         [in, size_is(cpspec)]
  2171.                 PROPSPEC                rgpspec[],
  2172.         [out, size_is(cpspec)]
  2173.                 PROPVARIANT             rgpropvar[]
  2174.         );
  2175.  
  2176.     HRESULT WriteMultiple(
  2177.         [in]    ULONG                   cpspec,
  2178.         [in, size_is(cpspec)]
  2179.                 PROPSPEC                rgpspec[],
  2180.         [in, size_is(cpspec)]
  2181.                 PROPVARIANT             rgpropvar[],
  2182.         [in]    PROPID                  propidNameFirst
  2183.         );
  2184.  
  2185.     HRESULT DeleteMultiple(
  2186.         [in]    ULONG                   cpspec,
  2187.         [in, size_is(cpspec)]
  2188.                 PROPSPEC                rgpspec[]
  2189.         );
  2190.  
  2191.     HRESULT ReadPropertyNames(
  2192.         [in]    ULONG                   cpropid,
  2193.         [in, size_is(cpropid)]
  2194.                 PROPID                  rgpropid[],
  2195.         [out, size_is(cpropid)]
  2196.                 LPOLESTR                rglpwstrName[]
  2197.         );
  2198.  
  2199.     HRESULT WritePropertyNames(
  2200.         [in]    ULONG                   cpropid,
  2201.         [in, size_is(cpropid)]
  2202.                 PROPID                  rgpropid[],
  2203.         [in, size_is(cpropid)]
  2204.                 LPOLESTR                rglpwstrName[]
  2205.         );
  2206.  
  2207.     HRESULT DeletePropertyNames(
  2208.         [in]    ULONG                   cpropid,
  2209.         [in, size_is(cpropid)]
  2210.                 PROPID                  rgpropid[]
  2211.         );
  2212.  
  2213.     HRESULT Commit(
  2214.         [in]    DWORD                   grfCommitFlags
  2215.         );
  2216.  
  2217.     HRESULT Revert();
  2218.  
  2219.     HRESULT Enum(
  2220.         [out]   IEnumSTATPROPSTG **     ppenum
  2221.         );
  2222.  
  2223.     HRESULT SetTimes(
  2224.         [in]    LPFILETIME pctime,
  2225.         [in]    LPFILETIME patime,
  2226.         [in]    LPFILETIME pmtime
  2227.         );
  2228.  
  2229.     HRESULT SetClass(
  2230.         [in]    REFCLSID                clsid
  2231.         );
  2232.  
  2233.     HRESULT Stat(
  2234.         [out]   STATPROPSETSTG *        pstatpsstg
  2235.         );
  2236. }
  2237.  
  2238.  
  2239. [
  2240.     object,
  2241.     uuid(0000013A-0000-0000-C000-000000000046),
  2242.     pointer_default(unique)
  2243. ]
  2244.  
  2245. interface IPropertySetStorage : IUnknown
  2246. {
  2247.  
  2248.     typedef [unique] IPropertySetStorage * LPPROPERTYSETSTORAGE;
  2249.  
  2250.     HRESULT Create(
  2251.         [in]    REFFMTID                rfmtid,
  2252.         [in, unique]
  2253.                 CLSID *                 pclsid,
  2254.         [in]    DWORD                   grfFlags,
  2255.         [in]    DWORD                   grfMode,
  2256.         [out]   IPropertyStorage **     ppprstg
  2257.         );
  2258.  
  2259.     HRESULT Open(
  2260.         [in]    REFFMTID                rfmtid,
  2261.         [in]    DWORD                   grfMode,
  2262.         [out]   IPropertyStorage **     ppprstg
  2263.         );
  2264.  
  2265.     HRESULT Delete(
  2266.         [in]    REFFMTID                rfmtid
  2267.         );
  2268.  
  2269.     HRESULT Enum(
  2270.         [out]   IEnumSTATPROPSETSTG **  ppenum
  2271.         );
  2272.  
  2273. }
  2274.  
  2275.  
  2276. [
  2277.     object,
  2278.     uuid(00000139-0000-0000-C000-000000000046),
  2279.     pointer_default(unique)
  2280. ]
  2281.  
  2282. interface IEnumSTATPROPSTG : IUnknown
  2283. {
  2284.  
  2285.     typedef [unique] IEnumSTATPROPSTG * LPENUMSTATPROPSTG;
  2286.  
  2287.     [local]
  2288.     HRESULT Next(
  2289.         [in]    ULONG                   celt,
  2290.         [in]    STATPROPSTG *           rgelt,
  2291.         [out]   ULONG *                 pceltFetched
  2292.         );
  2293.  
  2294.     [call_as(Next)]
  2295.     HRESULT RemoteNext(
  2296.         [in]    ULONG                   celt,
  2297.         [out, size_is(celt), length_is(*pceltFetched)]
  2298.                 STATPROPSTG *           rgelt,
  2299.         [out]   ULONG *                 pceltFetched
  2300.         );
  2301.  
  2302.     HRESULT Skip(
  2303.         [in]    ULONG                   celt
  2304.         );
  2305.  
  2306.     HRESULT Reset();
  2307.  
  2308.     HRESULT Clone(
  2309.         [out]   IEnumSTATPROPSTG **     ppenum
  2310.         );
  2311. }
  2312.  
  2313.  
  2314. [
  2315.     object,
  2316.     uuid(0000013B-0000-0000-C000-000000000046),
  2317.     pointer_default(unique)
  2318. ]
  2319.  
  2320. interface IEnumSTATPROPSETSTG : IUnknown
  2321. {
  2322.  
  2323.     typedef [unique] IEnumSTATPROPSETSTG * LPENUMSTATPROPSETSTG;
  2324.  
  2325.     [local]
  2326.     HRESULT Next(
  2327.         [in]    ULONG                   celt,
  2328.         [in]    STATPROPSETSTG *        rgelt,
  2329.         [out]   ULONG *                 pceltFetched
  2330.         );
  2331.  
  2332.     [call_as(Next)]
  2333.     HRESULT RemoteNext(
  2334.         [in]    ULONG                   celt,
  2335.         [out, size_is(celt), length_is(*pceltFetched)]
  2336.                 STATPROPSETSTG *        rgelt,
  2337.         [out]   ULONG *                 pceltFetched
  2338.         );
  2339.  
  2340.     HRESULT Skip(
  2341.         [in]    ULONG                   celt
  2342.         );
  2343.  
  2344.     HRESULT Reset();
  2345.  
  2346.     HRESULT Clone(
  2347.         [out]   IEnumSTATPROPSETSTG **  ppenum
  2348.         );
  2349. }
  2350.  
  2351. cpp_quote("WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );")
  2352. cpp_quote("WINOLEAPI PropVariantClear ( PROPVARIANT * pvar );")
  2353. cpp_quote("#   ifdef __cplusplus")
  2354. cpp_quote("inline void PropVariantInit ( PROPVARIANT * pvar )")
  2355. cpp_quote("{")
  2356. cpp_quote("    memset ( pvar, 0, sizeof(PROPVARIANT) );")
  2357. cpp_quote("}")
  2358. cpp_quote("#   else")
  2359. cpp_quote("#   define PropVariantInit(pvar) memset ( pvar, 0, sizeof(PROPVARIANT) )")
  2360. cpp_quote("#   endif")
  2361. cpp_quote("WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );")
  2362.  
  2363.  
  2364. /****************************************************************************
  2365.  *  Connection Point Interfaces
  2366.  ****************************************************************************/
  2367. [
  2368.     object,
  2369.     uuid(B196B286-BAB4-101A-B69C-00AA00341D07),
  2370.     pointer_default(unique)
  2371. ]
  2372. interface IConnectionPoint : IUnknown
  2373. {
  2374.     typedef IConnectionPoint * PCONNECTIONPOINT;
  2375.     typedef IConnectionPoint * LPCONNECTIONPOINT;
  2376.  
  2377.     HRESULT GetConnectionInterface
  2378.     (
  2379.         [out]           IID * piid
  2380.     );
  2381.  
  2382.     HRESULT GetConnectionPointContainer
  2383.     (
  2384.         [out]           IConnectionPointContainer ** ppCPC
  2385.     );
  2386.  
  2387.     HRESULT Advise
  2388.     (
  2389.         [in]    IUnknown * pUnkSink,
  2390.         [out]   DWORD *    pdwCookie
  2391.     );
  2392.  
  2393.     HRESULT Unadvise
  2394.     (
  2395.         [in]    DWORD dwCookie
  2396.     );
  2397.  
  2398.     HRESULT EnumConnections
  2399.     (
  2400.         [out]   IEnumConnections ** ppEnum
  2401.     );
  2402. }
  2403.  
  2404. [
  2405.     object,
  2406.     uuid(B196B284-BAB4-101A-B69C-00AA00341D07),
  2407.     pointer_default(unique)
  2408. ]
  2409. interface IConnectionPointContainer : IUnknown
  2410. {
  2411.     typedef IConnectionPointContainer * PCONNECTIONPOINTCONTAINER;
  2412.     typedef IConnectionPointContainer * LPCONNECTIONPOINTCONTAINER;
  2413.  
  2414.     HRESULT EnumConnectionPoints
  2415.     (
  2416.         [out]   IEnumConnectionPoints ** ppEnum
  2417.     );
  2418.  
  2419.     HRESULT FindConnectionPoint
  2420.     (
  2421.         [in]    REFIID riid,
  2422.         [out]   IConnectionPoint ** ppCP
  2423.     );
  2424. }
  2425.  
  2426.  
  2427. [
  2428.     object,
  2429.     uuid(B196B287-BAB4-101A-B69C-00AA00341D07),
  2430.     pointer_default(unique)
  2431. ]
  2432. interface IEnumConnections : IUnknown
  2433. {
  2434.     typedef IEnumConnections * PENUMCONNECTIONS;
  2435.     typedef IEnumConnections * LPENUMCONNECTIONS;
  2436.  
  2437.     typedef struct tagCONNECTDATA
  2438.     {
  2439.         IUnknown *  pUnk;
  2440.         DWORD       dwCookie;
  2441.     } CONNECTDATA;
  2442.  
  2443.     typedef struct tagCONNECTDATA * PCONNECTDATA;
  2444.     typedef struct tagCONNECTDATA * LPCONNECTDATA;
  2445.  
  2446.     [local]
  2447.     HRESULT Next(
  2448.         [in]    ULONG           cConnections,
  2449.         [out]   CONNECTDATA *   rgcd,
  2450.         [out]   ULONG *         lpcFetched
  2451.     );
  2452.  
  2453.     [call_as(Next)]
  2454.     HRESULT RemoteNext(
  2455.         [in]                            ULONG           cConnections,
  2456.         [out,
  2457.          size_is(cConnections),
  2458.          length_is(*lpcFetched)]        CONNECTDATA *   rgcd,
  2459.         [out]                           ULONG *         lpcFetched
  2460.     );
  2461.  
  2462.     HRESULT Skip
  2463.     (
  2464.         [in]    ULONG cConnections
  2465.     );
  2466.  
  2467.     HRESULT Reset
  2468.     (
  2469.         void
  2470.     );
  2471.  
  2472.     HRESULT Clone
  2473.     (
  2474.         [out]   IEnumConnections ** ppEnum
  2475.     );
  2476. }
  2477.  
  2478.  
  2479. [
  2480.     object,
  2481.     uuid(B196B285-BAB4-101A-B69C-00AA00341D07),
  2482.     pointer_default(unique)
  2483. ]
  2484. interface IEnumConnectionPoints : IUnknown
  2485. {
  2486.     typedef IEnumConnectionPoints * PENUMCONNECTIONPOINTS;
  2487.     typedef IEnumConnectionPoints * LPENUMCONNECTIONPOINTS;
  2488.  
  2489.     [local]
  2490.     HRESULT Next(
  2491.         [in]    ULONG               cConnections,
  2492.         [out]   IConnectionPoint ** rgpcn,
  2493.         [out]   ULONG *             lpcFetched
  2494.     );
  2495.  
  2496.     [call_as(Next)]
  2497.     HRESULT RemoteNext(
  2498.         [in]                        ULONG               cConnections,
  2499.         [out,
  2500.          size_is(cConnections),
  2501.          length_is(*lpcFetched)]    IConnectionPoint ** rgpcn,
  2502.         [out]                       ULONG *             lpcFetched
  2503.     );
  2504.  
  2505.     HRESULT Skip
  2506.     (
  2507.         [in]    ULONG   cConnections
  2508.     );
  2509.  
  2510.     HRESULT Reset
  2511.     (
  2512.         void
  2513.     );
  2514.  
  2515.     HRESULT Clone
  2516.     (
  2517.         [out]   IEnumConnectionPoints **    ppEnum
  2518.     );
  2519. }
  2520.  
  2521.  
  2522.  
  2523. [
  2524.     local,
  2525.     object,
  2526.     uuid(0000013D-0000-0000-C000-000000000046)
  2527. ]
  2528. interface IClientSecurity : IUnknown
  2529. {
  2530.  
  2531.     typedef struct tagSOLE_AUTHENTICATION_SERVICE
  2532.     {
  2533.         DWORD    dwAuthnSvc;
  2534.         DWORD    dwAuthzSvc;
  2535.         OLECHAR *pPrincipalName;
  2536.         HRESULT  hr;
  2537.     } SOLE_AUTHENTICATION_SERVICE;
  2538.  
  2539.     typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
  2540.  
  2541.     typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES
  2542.     {
  2543.         EOAC_NONE        = 0x0,
  2544.         EOAC_MUTUAL_AUTH = 0x1,
  2545.         EOAC_SECURE_REFS = 0x2
  2546.     } EOLE_AUTHENTICATION_CAPABILITIES;
  2547.  
  2548.     HRESULT QueryBlanket
  2549.     (
  2550.         [in]  IUnknown                *pProxy,
  2551.         [out] DWORD                   *pAuthnSvc,
  2552.         [out] DWORD                   *pAuthzSvc,
  2553.         [out] OLECHAR                **pServerPrincName,
  2554.         [out] DWORD                   *pAuthnLevel,
  2555.         [out] DWORD                   *pImpLevel,
  2556.         [out] void                   **pAuthInfo,
  2557.         [out] DWORD                   *pCapabilites
  2558.     );
  2559.  
  2560.     HRESULT SetBlanket
  2561.     (
  2562.         [in] IUnknown                 *pProxy,
  2563.         [in] DWORD                     AuthnSvc,
  2564.         [in] DWORD                     AuthzSvc,
  2565.         [in] OLECHAR                  *pServerPrincName,
  2566.         [in] DWORD                     AuthnLevel,
  2567.         [in] DWORD                     ImpLevel,
  2568.         [in] void                     *pAuthInfo,
  2569.         [in] DWORD                     Capabilities
  2570.     );
  2571.  
  2572.     HRESULT CopyProxy
  2573.     (
  2574.         [in]  IUnknown  *pProxy,
  2575.         [out] IUnknown **ppCopy
  2576.     );
  2577. }
  2578.  
  2579. [
  2580.     local,
  2581.     object,
  2582.     uuid(0000013E-0000-0000-C000-000000000046)
  2583. ]
  2584. interface IServerSecurity : IUnknown
  2585. {
  2586.     HRESULT QueryBlanket
  2587.     (
  2588.         [out] DWORD    *pAuthnSvc,
  2589.         [out] DWORD    *pAuthzSvc,
  2590.         [out] OLECHAR **pServerPrincName,
  2591.         [out] DWORD    *pAuthnLevel,
  2592.         [out] DWORD    *pImpLevel,
  2593.         [out] void    **pPrivs,
  2594.         [out] DWORD    *pCapabilities
  2595.     );
  2596.  
  2597.     HRESULT ImpersonateClient();
  2598.  
  2599.     HRESULT RevertToSelf();
  2600.  
  2601.     BOOL IsImpersonating();
  2602. }
  2603.  
  2604. [
  2605.     object,
  2606.     uuid(00000140-0000-0000-C000-000000000046)
  2607. ]
  2608.  
  2609. interface IClassActivator : IUnknown
  2610. {
  2611.     HRESULT GetClassObject(
  2612.         [in] REFCLSID rclsid,
  2613.         [in] DWORD dwClassContext,
  2614.         [in] LCID locale,
  2615.         [in] REFIID riid,
  2616.         [out, iid_is(riid)] void **ppv);
  2617. }
  2618.  
  2619.  
  2620. [
  2621.     local,
  2622.     object,
  2623.     uuid(99caf010-415e-11cf-8814-00aa00b569f5),
  2624.     pointer_default(unique)
  2625. ]
  2626.  
  2627. interface IFillLockBytes: IUnknown
  2628. {
  2629.  
  2630.     HRESULT FillAppend
  2631.     (
  2632.         [in] void const *pv,
  2633.         [in] ULONG cb,
  2634.         [out] ULONG *pcbWritten
  2635.     );
  2636.  
  2637.     HRESULT FillAt
  2638.     (
  2639.         [in] ULARGE_INTEGER ulOffset,
  2640.         [in] void const *pv,
  2641.         [in] ULONG cb,
  2642.         [out] ULONG *pcbWritten
  2643.     );
  2644.  
  2645.     HRESULT SetFillSize
  2646.     (
  2647.         [in] ULARGE_INTEGER ulSize
  2648.     );
  2649.  
  2650.     HRESULT Terminate
  2651.     (
  2652.         [in] BOOL bCanceled
  2653.     );
  2654. }
  2655.  
  2656.  
  2657. [
  2658.     local,
  2659.     object,
  2660.     uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),
  2661.     pointer_default(unique)
  2662. ]
  2663.  
  2664. interface IProgressNotify: IUnknown
  2665. {
  2666.  
  2667.  
  2668.     HRESULT OnProgress (
  2669.     [in]        DWORD           dwProgressCurrent,
  2670.     [in]        DWORD           dwProgressMaximum,
  2671.     [in]        BOOL            fAccurate,
  2672.     [in]        BOOL            fOwner
  2673.     );
  2674.  
  2675. }
  2676.  
  2677. [
  2678.     local,
  2679.     object,
  2680.     uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),
  2681.     pointer_default(unique)
  2682. ]
  2683.  
  2684.  
  2685. interface ILayoutStorage: IUnknown
  2686. {
  2687.  
  2688.  
  2689.     typedef struct tagStorageLayout 
  2690.     {    DWORD             LayoutType;
  2691.         OLECHAR            *pwcsElementName;
  2692.         LARGE_INTEGER   cOffset;
  2693.         LARGE_INTEGER    cBytes;
  2694.     } StorageLayout;
  2695.  
  2696.  
  2697.     HRESULT __stdcall LayoutScript(
  2698.     [in]    StorageLayout    *pStorageLayout,
  2699.     [in]    DWORD            nEntries,
  2700.     [in]    DWORD            glfInterleavedFlag);
  2701.  
  2702.     HRESULT __stdcall BeginMonitor(void);
  2703.  
  2704.     HRESULT __stdcall EndMonitor(void);
  2705.  
  2706.     HRESULT __stdcall ReLayoutDocfile(
  2707.     [in]    OLECHAR            *pwcsNewDfName);
  2708.  
  2709.  
  2710. }
  2711.  
  2712. #endif
  2713.